﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace Jurassic_Island
{
    public partial class FormLugares : Form
    {
        private DataSet dsLugares;
        private ENLugares enLug;
        private String exprBuscar = @"^[a-zA-Z0-9ñÑ ]*$";

        public FormLugares()
        {
            InitializeComponent();
        }

        private void FormLugares_Load(object sender, EventArgs e)
        {
            enLug = new ENLugares();
            dsLugares = new DataSet();
            ActualizarDataGrid();
        }


        private void btInsertar_Click(object sender, EventArgs e)
        {
            FormInsertLugar formInsLug = new FormInsertLugar();
            formInsLug.ShowDialog();
            ActualizarDataGrid();
        }

        public void ActualizarDataGrid()
        {
            try
            {
                dsLugares = enLug.ObtenerListaLugares();
                dgvLugares.DataSource = dsLugares;
                dgvLugares.DataMember = "Lugares";
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btEditar_Click(object sender, EventArgs e)
        {
            try
            {

                if (dgvLugares.SelectedRows.Count > 0)
                {
                    enLug.Nombre = dgvLugares["Nombre", dgvLugares.CurrentRow.Index].Value.ToString();
                    enLug.CoordX = Int16.Parse(dgvLugares["Coordenada X", dgvLugares.CurrentRow.Index].Value.ToString());
                    enLug.CoordY = Int16.Parse(dgvLugares["Coordenada Y", dgvLugares.CurrentRow.Index].Value.ToString());
                    enLug.Descripcion = dgvLugares["Descripcion", dgvLugares.CurrentRow.Index].Value.ToString();
                    enLug.Imagen = dgvLugares["Imagen", dgvLugares.CurrentRow.Index].Value.ToString();

                    FormInsertLugar formInsLug = new FormInsertLugar(enLug);
                    formInsLug.ShowDialog();
                    ActualizarDataGrid();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btBorrar_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvLugares.SelectedRows.Count > 0)
                {
                    dsLugares = enLug.ObtenerListaLugares();

                    bool parar = false;
                    ENCaminos enCam = new ENCaminos();
                    ENFinal enFin = new ENFinal();
                    ENEventosLocalizacion enEvLoc = new ENEventosLocalizacion();
                    DataSet dsCam;
                    DataSet dsFin;
                    DataSet dsEvLoc;
                    dsCam = enCam.ObtenerListaCaminosPorLugar(dgvLugares.SelectedCells[0].Value.ToString());
                    dsFin = enFin.ObtenerListaFinalesPorLugar(dgvLugares.SelectedCells[0].Value.ToString());
                    dsEvLoc = enEvLoc.ObtenerListaEventosLocalizacionPorLugar(dgvLugares.SelectedCells[0].Value.ToString());
                    //TODO: en la tabla finales, tambien se hace referencia a lugares,  tambien en eventos de localizacion
//(en la tabla de eventos de localizacion, al campo se le llama "sitio")
                    if (dsCam.Tables["Caminos"].Rows.Count > 0)
                    {
                        if (MessageBox.Show("Se van a borrar elementos de la tabla Caminos, estas seguro que deseas borrarlas tambien?", "Borrar lugar", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            foreach (DataRow dr in dsCam.Tables["Caminos"].Rows)
                            {
                                enCam.ID = Int16.Parse(dr["id"].ToString());
                                enCam.Origen = dr["origen"].ToString();
                                enCam.Destino = dr["destino"].ToString();
                                enCam.Coste = Int16.Parse(dr["coste"].ToString());
                                enCam.EliminarCamino();
                            }
                        }
                        else
                        {
                            parar = true;
                        }
                    }
                    if (dsFin.Tables["Finales"].Rows.Count > 0)
                    {
                        if (MessageBox.Show("Se van a borrar elementos de la tabla Finales, estas seguro que deseas borrarlas tambien?", "Borrar lugar", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            foreach (DataRow dr in dsFin.Tables["Finales"].Rows)
                            {
                                //enFin.Id = Int16.Parse(dr["ID"].ToString());
                                enFin.Nombre = dr["Nombre"].ToString();
                                enFin.Lugar = dr["Lugar"].ToString();
                                enFin.Descripcion = dr["Descripcion"].ToString();
                                enFin.EliminarFinal();
                            }
                        }
                        else
                        {
                            parar = true;
                        }
                    }
                    if (dsEvLoc.Tables["Eventos_Localizacion"].Rows.Count > 0)
                    {
                        if (MessageBox.Show("Se van a borrar elementos de la tabla Eventos_Localizacion, estas seguro que deseas borrarlas tambien?", "Borrar lugar", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                        {
                            foreach (DataRow dr in dsEvLoc.Tables["Eventos_Localizacion"].Rows)
                            {
                                enEvLoc.Id_evloc = Int16.Parse(dr["id"].ToString());
                                enEvLoc.Nombre_evloc = dr["nombre"].ToString();
                                enEvLoc.Sitio_evloc = dr["sitio"].ToString();
                                enEvLoc.Efecto_evloc = double.Parse(dr["efecto"].ToString());
                                enEvLoc.BorrarEventoLocalizacion();
                            }
                        }
                        else
                        {
                            parar = true;
                        }
                    }


                    if (parar==false && MessageBox.Show("Seguro que deseas borrar la fila seleccionada?", "Borrar lugar", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes)
                     {
                            dsLugares.Tables["Lugares"].Rows[dgvLugares.CurrentRow.Index].Delete();

                            if (enLug.ActualizarLugares(dsLugares))
                                MessageBox.Show("Lugar borrado correctamente", "Correcto", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            else
                                MessageBox.Show("Error, no se ha podido eliminar el lugar", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                      }

                    ActualizarDataGrid();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void btCerrar_Click(object sender, EventArgs e)
        {
            Close();
            Dispose();
        }

        private void dgvLugares_Resize(object sender, EventArgs e)
        {

        }

        private void FormObjetos_Resize(object sender, EventArgs e)
        {
            Refresh();
        }

        private void tbBuscar_DoubleClick(object sender, EventArgs e)
        {
            tbBuscar.Text = "";
        }

        private void btBuscar_Click(object sender, EventArgs e)
        {
            if (Regex.Match(tbBuscar.Text, exprBuscar).Success)
            {
                try
                {
                    dsLugares = enLug.BuscarListaLugares(tbBuscar.Text);
                    dgvLugares.DataSource = dsLugares;
                    dgvLugares.DataMember = "Lugares";
                    epLugares.SetError(tbBuscar, "");
                }

                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else if (tbBuscar.Text == "")
            {
                dsLugares = enLug.ObtenerListaLugares();
                dgvLugares.DataSource = dsLugares;
                dgvLugares.DataMember = "Lugares";
                epLugares.SetError(tbBuscar, "");
            }
            else
            {
                MessageBox.Show("Parametro incorrecto en la busqueda", "Error de búsqueda.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                epLugares.SetError(tbBuscar, "Introduzca un texto válido.");
            }
        }

        private void tbBuscar_TextChanged(object sender, EventArgs e)
        {
            if (!Regex.IsMatch(tbBuscar.Text, exprBuscar))
            {
                epLugares.SetError(tbBuscar, "Introduzca un texto válido.");
            }
            else
            {
                epLugares.SetError(tbBuscar, "");
            }
        }
    }
}